/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Competencia;
import co.com.sed.model.beans.SubCompetencia;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 * 
 */
public class SubCompetenciaPeer {

	private static final String BUSCAR_SUBCOMPETENCIAS = "SELECT id_sub_compet, descripcion, competencia FROM sub_competencia";

	private static final String BUSCAR_SUBCOMPETENCIA_POR_COMPETENCIA = "SELECT id_sub_compet, descripcion, competencia FROM sub_competencia "
			+ "WHERE competencia = &competencia";

	private static final String BUSCAR_SUBCOMPETENCIA = "SELECT id_sub_compet, descripcion, competencia FROM sub_competencia "
			+ "WHERE id_sub_compet = &id_sub_compet";

	private static final String INSERTAR_SUBCOMPETENCIA = "INSERT INTO sub_competencia (descripcion, competencia) VALUES "
			+ "('&descripcion', &competencia)";

	private static final String ACTUALIZAR_SUBCOMPETENCIA = "UPDATE sub_competencia "
			+ "SET descripcion = &descripcion , competencia = &competencia  "
			+ "WHERE id_sub_compet = &id_sub_compet";

	private static final String ELIMINAR_SUBCOMPETENCIA = "DELETE FROM sub_competencia "
			+ "WHERE id_sub_compet = &id_sub_compet";

	/**
	 * busca en la base de datos todos los registros de la tabla
	 * "sub_competencia"
	 * 
	 * @param stmt
	 *            referencia al Statement, pasado por DataManager para realizar
	 *            la consulta
	 * 
	 * @return lista de sub_competencia
	 * @see SubCompetencia, Statement
	 */
	public static ArrayList<SubCompetencia> buscartodasSubCompetencia(
			Statement stmt) {
		ArrayList<SubCompetencia> subCompetencias = new ArrayList<SubCompetencia>();

		String sql = BUSCAR_SUBCOMPETENCIAS; // "SELECT id_sub_compet, observacion, rango FROM sub_competencia ";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					SubCompetencia scomp = new SubCompetencia();

					scomp.setIdSubCompetencia(rs.getInt("id_sub_compet"));
					scomp.setDescripcion(rs.getString("descripcion"));
					scomp.setCompetencia(new Competencia(rs
							.getInt("competencia")));

					subCompetencias.add(scomp);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return subCompetencias;
	}

	/**
	 * busca en la base de datos todos los registros de la tabla
	 * "subcompetencia" que pertenescan a una competencia
	 * 
	 * @param stmt
	 *            referencia al Statement, pasado por DataManager para realizar
	 *            la consulta
	 * 
	 * @return lista de subcompentencias
	 * @see SubCompetencia, Statement
	 */
	public static ArrayList<SubCompetencia> buscarSubCompetenciaPorCompetencia(
			Statement stmt, int idCompetencia) {
		ArrayList<SubCompetencia> subCompetencias = new ArrayList<SubCompetencia>();

		String sql = BUSCAR_SUBCOMPETENCIA_POR_COMPETENCIA;

		// se setean los "parametros"
		sql = sql.replaceAll("&competencia", "" + idCompetencia);

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					SubCompetencia scom = new SubCompetencia();

					scom.setIdSubCompetencia(rs.getInt("id_sub_compet"));
					scom.setDescripcion(rs.getString("descripcion"));
					scom.setCompetencia(new Competencia(rs
							.getInt("competencia")));

					subCompetencias.add(scom);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return subCompetencias;
	}

	/**
	 * busca en la base de datos un registro de la tabla "sub_competencia"
	 * 
	 * @param stmt
	 *            referencia al Statement, pasado por DataManager para realizar
	 *            la consulta
	 * @param idSubCompetencia
	 *            id de la sub_competencia que se desea cosultar
	 * 
	 * @return sub_competencia buscada
	 * @see SubCompetencia, Statement
	 */
	public static SubCompetencia buscarSubCompetencia(Statement stmt,
			int idSubCompetencia) {
		SubCompetencia sub_competencia = new SubCompetencia();

		String sql = BUSCAR_SUBCOMPETENCIA;
		// "SELECT id_sub_compet, observacion, rango FROM sub_competencia "+
		// "WHERE id_sub_compet = &id_sub_compet";

		// se setean los "parametros"
		sql = sql
				.replaceAll("&id_sub_compet", String.valueOf(idSubCompetencia));

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {

					sub_competencia.setIdSubCompetencia(rs
							.getInt("id_sub_compet"));
					sub_competencia.setDescripcion(rs.getString("descripcion"));
					sub_competencia.setCompetencia(new Competencia(rs
							.getInt("competencia")));

				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return sub_competencia;
	}

	/**
	 * Inserta una SubCompetencia en la base de datos
	 * 
	 * @param stmt
	 *            referencia al Statement, pasado por DataManager para ejecutar
	 *            la sentencia
	 * @param sub_competencia
	 *            sub_competencia que se va a insertar en la base de datos
	 * 
	 * @return void
	 * @throws SQLException
	 *             si ocurre un error al insertar el registro en la base de
	 *             datos
	 * 
	 * @see DataManager
	 */
	public static int insertarSubCompetencia(Statement stmt,SubCompetencia sub_competencia) throws SQLException {
		int idNuevaSubCompetencia = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_SUBCOMPETENCIA;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql =sql.replaceAll("&descripcion", "" + sub_competencia.getDescripcion())
					.replaceAll("&competencia", "" + sub_competencia.getCompetencia().getIdCompetencia());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaSubCompetencia = rs.getInt("id_sub_compet");
				Util.print("nuevo registro: " + idNuevaSubCompetencia);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaSubCompetencia;
	}
	
	/**
	 * Actualiza una sub_competencia en la base de datos
	 * 
	 * @param stmt
	 *            referencia al Statement, pasado por DataManager para ejecutar
	 *            la sentencia
	 * @param sub_competencia
	 *            sub_competencia que se va a actualizar en la base de datos
	 * 
	 * @return void
	 * @throws SQLException
	 *             si ocurre un error al actualizar el registro en la base de
	 *             datos
	 * 
	 * @see DataManager
	 */
	public static void actualizarSubCompetencia(Statement stmt,
			SubCompetencia sub_competencia) throws SQLException {
		String sql = ACTUALIZAR_SUBCOMPETENCIA;
		// se setean los "parametros": &id_sub_compet, &observacion
		sql = sql
				.replaceAll("&id_sub_compet",
						"" + sub_competencia.getIdSubCompetencia())
				.replaceAll("&descripcion", sub_competencia.getDescripcion())
				.replaceAll("&competencia",
						"" + sub_competencia.getCompetencia());

		stmt.executeUpdate(sql);
	}

	/**
	 * Elimina un sub_competencia en la base de datos
	 * 
	 * @param stmt
	 *            referencia al Statement, pasado por DataManager para ejecutar
	 *            la sentencia
	 * @param sub_competencia
	 *            sub_competencia que se va a eliminar en la base de datos
	 * 
	 * @return void
	 * @throws SQLException
	 *             si ocurre un error al eliminar el registro en la base de
	 *             datos
	 * 
	 * @see DataManager
	 */

	public static void eliminarSubCompetencia(Statement stmt,
			SubCompetencia sub_competencia) throws SQLException {
		String sql = ELIMINAR_SUBCOMPETENCIA;
		// se setean los "id_sub_compet = &id_sub_compet";
		sql = sql.replaceAll("&id_sub_compet",
				"" + sub_competencia.getIdSubCompetencia());

		stmt.executeUpdate(sql);
	}

}
